/**
 * 产品管理模块专用测试脚本
 */

// 产品数据验证
function validateProductData(product) {
    var requiredFields = ['id', 'name', 'description', 'categoryId', 'brand', 'status', 'sort'];
    
    requiredFields.forEach(function(field) {
        pm.test("产品数据包含" + field + "字段", function () {
            pm.expect(product).to.have.property(field);
        });
    });
    
    pm.test("产品名称不为空", function () {
        pm.expect(product.name).to.not.be.empty;
    });
    
    pm.test("产品状态有效", function () {
        pm.expect([0, 1]).to.include(product.status);
    });
    
    pm.test("产品排序值有效", function () {
        pm.expect(product.sort).to.be.a('number');
        pm.expect(product.sort).to.be.at.least(0);
    });
}

// 产品列表验证
function validateProductList(products) {
    pm.test("产品列表是数组", function () {
        pm.expect(products).to.be.an('array');
    });
    
    if (products.length > 0) {
        pm.test("产品列表不为空时验证第一个产品", function () {
            validateProductData(products[0]);
        });
    }
}

// 产品创建测试
function testProductCreation() {
    pm.test("产品创建成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
        pm.expect(jsonData.data).to.have.property('id');
    });
    
    // 保存产品ID
    if (pm.response.json().data && pm.response.json().data.id) {
        pm.environment.set('product_id', pm.response.json().data.id);
        console.log("已保存产品ID: " + pm.response.json().data.id);
    }
}

// 产品更新测试
function testProductUpdate() {
    pm.test("产品更新成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
    });
    
    pm.test("更新后的数据正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            validateProductData(jsonData.data);
        }
    });
}

// 产品删除测试
function testProductDeletion() {
    pm.test("产品删除成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
    });
}

// 产品查询测试
function testProductQuery() {
    pm.test("产品查询成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
        pm.expect(jsonData.data).to.have.property('id');
    });
    
    pm.test("查询结果数据完整", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            validateProductData(jsonData.data);
        }
    });
}

// 产品分页测试
function testProductPagination() {
    pm.test("分页查询成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
        pm.expect(jsonData.data).to.have.property('records');
        pm.expect(jsonData.data).to.have.property('total');
        pm.expect(jsonData.data).to.have.property('current');
        pm.expect(jsonData.data).to.have.property('size');
    });
    
    pm.test("分页数据格式正确", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.data.records).to.be.an('array');
        pm.expect(jsonData.data.total).to.be.a('number');
        pm.expect(jsonData.data.current).to.be.a('number');
        pm.expect(jsonData.data.size).to.be.a('number');
    });
    
    if (pm.response.json().data.records.length > 0) {
        pm.test("分页数据内容验证", function () {
            validateProductList(pm.response.json().data.records);
        });
    }
}

// 产品状态测试
function testProductStatus() {
    pm.test("产品状态更新成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
    });
}

// 产品搜索测试
function testProductSearch() {
    pm.test("产品搜索成功", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData.code).to.eql(200);
    });
    
    pm.test("搜索结果包含相关产品", function () {
        var jsonData = pm.response.json();
        if (jsonData.data && jsonData.data.records.length > 0) {
            var searchKeyword = pm.environment.get('search_keyword') || '测试';
            var found = jsonData.data.records.some(function(product) {
                return product.name.includes(searchKeyword) || 
                       product.description.includes(searchKeyword);
            });
            pm.expect(found).to.be.true;
        }
    });
}

// 产品分类关联测试
function testProductCategoryRelation() {
    pm.test("产品分类关联正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            pm.expect(jsonData.data).to.have.property('categoryId');
            pm.expect(jsonData.data.categoryId).to.be.a('number');
        }
    });
}

// 产品品牌测试
function testProductBrand() {
    pm.test("产品品牌信息正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            pm.expect(jsonData.data).to.have.property('brand');
            pm.expect(jsonData.data.brand).to.not.be.empty;
        }
    });
}

// 产品价格测试
function testProductPrice() {
    pm.test("产品价格信息正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            if (jsonData.data.price) {
                pm.expect(jsonData.data.price).to.be.a('number');
                pm.expect(jsonData.data.price).to.be.at.least(0);
            }
        }
    });
}

// 产品库存测试
function testProductInventory() {
    pm.test("产品库存信息正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            if (jsonData.data.stock) {
                pm.expect(jsonData.data.stock).to.be.a('number');
                pm.expect(jsonData.data.stock).to.be.at.least(0);
            }
        }
    });
}

// 产品图片测试
function testProductImages() {
    pm.test("产品图片信息正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            if (jsonData.data.images) {
                pm.expect(jsonData.data.images).to.be.an('array');
            }
        }
    });
}

// 产品属性测试
function testProductAttributes() {
    pm.test("产品属性信息正确", function () {
        var jsonData = pm.response.json();
        if (jsonData.data) {
            if (jsonData.data.attributes) {
                pm.expect(jsonData.data.attributes).to.be.an('object');
            }
        }
    });
}

// 导出函数
if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        validateProductData: validateProductData,
        validateProductList: validateProductList,
        testProductCreation: testProductCreation,
        testProductUpdate: testProductUpdate,
        testProductDeletion: testProductDeletion,
        testProductQuery: testProductQuery,
        testProductPagination: testProductPagination,
        testProductStatus: testProductStatus,
        testProductSearch: testProductSearch,
        testProductCategoryRelation: testProductCategoryRelation,
        testProductBrand: testProductBrand,
        testProductPrice: testProductPrice,
        testProductInventory: testProductInventory,
        testProductImages: testProductImages,
        testProductAttributes: testProductAttributes
    };
}
